package java学习.第18章_JDK8_17新特性;

/**
 * 在 Java 中如果想让一个类不能被继承和修改，这时我们应该使用 final 关键字对类进行修饰。
 *      不过这种要么可以继承，要么不能继承的机制不够灵活，
 *      有些时候我们可能想让某个类可以被某些类型继承，但是又不能随意继承，是做不到的。
 * Java 15 尝试解决这个问题，引入了 sealed 类，被 sealed 修饰的类可以指定子类。
 *      这样这个类就只能被指定的类继承。
 *
 * JDK15的预览特性：
 *      通过密封的类和接口来限制超类的使用，密封的类和接口限制其它可能继承或实现它们的其它类或接口。
 *
 * 具体使用：
 *      使用修饰符sealed，可以将一个类声明为密封类。
 *      密封的类使用保留关键字permits列出可以直接扩展（即extends）它的类。
 *
 *      sealed 修饰的类的机制具有传递性，它的子类必须使用指定的关键字进行修饰，
 *      且只能是 final、sealed、non-sealed 三者之一。
 */
public class JDK15_17之sealed之密封类 {

}
//只能被                        这三个被继承
sealed class Person permits Student,Teacher,Worker{

}
//子类不能被继承  所以次子类  必须是 最终的 final
final class Student extends Person{

}
//或者 此类也是  sealed
sealed class Teacher extends Person permits SeniorTeacher{

}
//或者  non-sealed 表示 Worker 没有 sealed 的限制
non-sealed class Worker extends Person{

}

final class SeniorTeacher extends Teacher{

}

